// encoder.h
#ifndef ENCODER_H
#define ENCODER_H

#include "Arduino.h"

typedef struct {
    volatile int32_t count;
    uint8_t last_ab;
    GPIO_PinName pin_a;
    GPIO_PinName pin_b;
	void (*callback)(void *context); //回调函数，用于m/t法测速
	void *callback_context;
} Encoder;

void encoder_init(Encoder *enc, GPIO_PinName pin_a, GPIO_PinName pin_b);
void encoder_register_callback(Encoder *enc, void (*callback)(void *ctx), void *context);
int32_t encoder_get_count(Encoder *enc);
void encoder_reset(Encoder *enc);
static void update_encoder(Encoder *enc);
#endif
